# -*- coding: utf-8 -*-
# @Time : 2024/2/28 22:44
# @Author : Hami
import allure_commons
from api_keyword.api_key import ApiKey
import pytest
import logging

# 自动调起这个文件，代表这个方法即是生效的。所以别的方法可以直接进行调用就可以获取这个数据
# 维护一些前置的方法，必须在main_run.py 文件运行才生效
# 运行的作用范围：默认是 funtion
@pytest.fixture(scope="session")  #  测试夹具：测试用例进行测试数据创建，或者测试环境初始化、摧毁
def token_fix():
    print("-----我自动执行")
    # 1. 请求数据
    url = "http://shop-xo.hctestedu.com/index.php?s=/api/user/login"
    params = {"application": "app", "application_client_type": "weixin"}
    data = {"accounts": "hami", "pwd": "123456", "type": "username"}
    ak = ApiKey()
    # 2. 发送请求
    res = ak.post(url=url, params=params, data=data)
    # 3. 获取token
    token = ak.get_text(res.json(), "$..token")
    return token

@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    # 通过 out = yield 定义了一个生成器。在生成器中，res = out.get_result() 获取了测试结果对象。
    out = yield
    res = out.get_result()
    #  res.when == "call"：表示正在运行调用测试函数的阶段。
    if res.when == "call":
        logging.info(f"用例ID：{res.nodeid}")
        logging.info(f"测试结果：{res.outcome}")
        logging.info(f"故障表示：{res.longrepr}")
        logging.info(f"异常：{call.excinfo}")
        logging.info(f"用例耗时：{res.duration}")
        logging.info("**************************************")